iT邦幫忙

2025 iThome 鐵人賽

DAY 17
0
佛心分享-我的私藏工具箱

開發環境設定指南及工具分享系列 第 17

DayDocker Compose 指令大解密:該用 docker compose 還是 docker-compose?

  • 分享至 

  • xImage
  •  

在你看過的許多教學、文章或甚至是公司的舊專案中,你可能會看到兩種啟動 Docker Compose 的指令:一個是帶有連字號的 docker-compose,另一個則是作為 docker 主命令一部分的 docker compose

它們看起來只是差了一個連字號,但背後卻代表著 Docker Compose 的一次重要演進。這兩者有什麼不同?我應該使用哪一個?今天,我們就來徹底解開這個謎團。

故事的開端:docker-compose (V1)

早期,docker-compose 是一個獨立的工具,使用 Python 編寫。它作為 Docker 生態系的一個輔助專案存在,因此你需要透過 pip 或其他包管理器單獨安裝它。

它的特點是:

  • 獨立執行檔:它是一個名為 docker-compose 的獨立二進制檔案或腳本。

  • 連字號語法:所有指令都圍繞著 docker-compose 這個主命令,例如 docker-compose updocker-compose downdocker-compose ps

  • 停止維護:截至 2023 年 7 月,Docker 官方已正式宣佈停止對 docker-compose V1 的支援與更新。這意味著它將不再獲得新功能或安全性修補程式。

這就是你在許多舊資料中看到的版本,它功不可沒,但已是過去式。

現代的選擇:docker compose (V2)

隨著 Docker 功能的整合與發展,社群和官方都希望提供一個更無縫、更一致的使用體驗。因此,Docker Compose 的功能被直接整合進了主要的 Docker CLI 中,這就是 V2 版本的由來。

docker compose V2 使用 Go 語言重寫,並作為 Docker CLI 的一個子命令 (plugin) 發布。

它的特點是:

  • CLI 整合:它不再是獨立工具,而是 docker 主命令的一部分。只要你安裝了較新版本的 Docker Desktop 或 Docker Engine,它就已經內建其中,無需額外安裝。

  • 空格語法:指令格式變為 docker compose ...,例如 docker compose updocker compose down。這種風格與 docker container lsdocker image prune 等其他 Docker 指令保持了高度一致性。

  • 更快的效能:由於使用 Go 語言重寫,V2 在解析 YAML 檔案和管理容器生命週期方面通常比 V1 更快。

  • 新功能與持續支援:所有新功能,例如 profiles 的改進、--wait 參數等,都只會在 V2 中出現。它是官方持續維護和發展的版本。

V1 vs. V2:實際差異對照表

功能 docker-compose (V1) docker compose (V2) 備註
安裝方式 需額外安裝 (e.g., pip) 隨 Docker Engine/Desktop 內建 V2 更方便
主要指令 docker-compose docker compose 注意連字號與空格的區別
啟動服務 docker-compose up -d docker compose up -d 主要參數大多相容
關閉服務 docker-compose down docker compose down 主要參數大多相容
查看日誌 docker-compose logs -f docker compose logs -f 主要參數大多相容
建置映像 docker-compose build docker compose build 主要參數大多相容
專案名稱 預設使用目錄名稱,可用 -p指定 同左,但 COMPOSE_PROJECT_NAME 環境變數更好用 V2 的整合度更高
支援狀態 已停止支援 官方推薦,持續更新 這是最重要的差異!

我該如何選擇?

答案非常明確:現在就開始全面使用 docker compose (V2)!

理由如下:

  1. 官方趨勢:V1 已經 EOL (End-of-Life),繼續使用意味著你將錯過重要的功能更新和安全修補。

  2. 體驗一致性docker compose 的語法與所有其他 docker 指令統一,降低了記憶負擔,讓你的工作流程更順暢。

  3. 無需額外安裝:簡化了環境設定的複雜度,特別是在建置 CI/CD pipeline 或設定新開發機時。

  4. 未來的新功能:所有酷炫的新功能都將只出現在 V2 中。

如果你還在舊專案中習慣性地敲著 docker-compose,現在是時候改過來了。雖然目前大部分常用指令在新舊版本間仍然相容,但儘早擁抱 V2,才能確保你的技能與 Docker 生態系的發展保持同步。

結論

docker-compose (V1) 是過去的功臣,而 docker compose (V2) 則是現在與未來的標準。從今天起,讓我們養成使用 docker compose 的好習慣,享受 Docker 帶來的一致性、高效能與持續創新的紅利。


上一篇
Day16-docker-compose(volumes&network)
下一篇
Day18-Docker 問題排查好工具
系列文
開發環境設定指南及工具分享25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言